//
//  NewFeatureViewController.swift
//  Weibo
//
//  Created by 潇 on 15/12/20.
//  Copyright © 2015年 潇. All rights reserved.
//常见错误:UICollectionView must be initialized with a non-nil layout parameter'
//解决方法:

import UIKit
import SnapKit


private let imageCount = 4

private let reuseIdentifier = "Cell"

class NewFeatureViewController: UICollectionViewController {

    //这里不需要添加 override ,因为构造函数继承只能向上一个层级,不能两级
    init() {
         //调用指定构造方法,实例化对象
        let layout = UICollectionViewFlowLayout()//指定流水布局
        //修改布局
         //全屏
        layout.itemSize = UIScreen.mainScreen().bounds.size
        //修改视图滚动方向
        layout.scrollDirection = UICollectionViewScrollDirection.Horizontal
        //修改item 上下左右的间距
        layout.minimumLineSpacing = 0
        layout.minimumInteritemSpacing = 0
        
        super.init(collectionViewLayout:layout)
        
        //super.init()时构造函数的最后一步 如果提前设置  会被撤销掉
        //设置分页滚动
        collectionView?.pagingEnabled = true
        collectionView?.showsHorizontalScrollIndicator = false
        //取消弹簧效果
        collectionView?.bounces = false
    }

    //如果当前视图控制器通过 xib/sb 加载,程序就会崩溃
    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    override func viewDidLoad() {
        super.viewDidLoad()
        //绑定 cell 
        //OC:[UICollectionViewCell class]
        //Swift:UICollectionViewCell.self
    self.collectionView!.registerClass(NewFeatureCell.self, forCellWithReuseIdentifier: reuseIdentifier)

        // Do any additional setup after loading the view.
    }

   

    // MARK: UICollectionViewDataSource
//    //有多少组
//    override func numberOfSectionsInCollectionView(collectionView: UICollectionView) -> Int {
//        // #warning Incomplete implementation, return the number of sections
//        return 0
//    }

    //每一组有多少行
    override func collectionView(collectionView: UICollectionView, numberOfItemsInSection section: Int) -> Int {
        // #warning Incomplete implementation, return the number of items
        return imageCount
    }
    
    //每一行显示的内容
    override func collectionView(collectionView: UICollectionView, cellForItemAtIndexPath indexPath: NSIndexPath) -> UICollectionViewCell {//真实身份是 NewFeatureCell
        let cell = collectionView.dequeueReusableCellWithReuseIdentifier(reuseIdentifier, forIndexPath: indexPath) as! NewFeatureCell
    
        // 测试代码
//        cell.backgroundColor = indexPath.item % 2 == 0 ?UIColor.redColor() : UIColor.yellowColor()
        
        cell.index = indexPath.item
        return cell
    }
    
    //collectionView的协议方法,为了解决新特性页面跳转到开始体验页在调用动画效果
    override func collectionView(collectionView: UICollectionView, didEndDisplayingCell cell: UICollectionViewCell, forItemAtIndexPath indexPath: NSIndexPath) {
        //cell 完成展示之后
//        print(indexPath.item)//打印的是上一个indexPath
        //获取转变的 cell
        let cell = collectionView.visibleCells().last! as! NewFeatureCell
        //获取 cell 的 indexPath
        let indexPath = collectionView.indexPathForCell(cell)!
//        print(indexPath?.item)
        //判断index.item 是不是等于3 是的话执行动画
        if indexPath.item == imageCount - 1 {
            //执行动画
            cell.showAnimation()
        }
        
    }

    

}


//在一个文件中,可以同时建很多类
class NewFeatureCell : UICollectionViewCell {
    
    //添加 index 属性
    var index: Int = 0 {
        didSet{
            //didSet和 OC中重写 Set 方法是一样的
            //修改 cell对应显示的 image
            iconView.image = UIImage(named: "new_feature_\(index + 1)")
            
            //隐藏123页面的 开始体验
            startBtn.hidden = true
//            startBtn.hidden = index != 3
//            self.showAnimation()
        }
    }
    
    //重写构造方法 cell构造的入口
    override init(frame: CGRect) {
        super.init(frame: frame)
//        print(frame)//水平方向位移
        setupUI()
    }

    required init?(coder aDecoder: NSCoder) {
        fatalError("init(coder:) has not been implemented")
    }
    
    //设置界面
    private func setupUI() {
        //添加子视图
        //自定义的子视图,需要添加在 contentView 上
        contentView.addSubview(iconView)
        contentView.addSubview(startBtn)
        
        //使用 SnapKit 添加约束
        //iconView:要添加约束的控件
        //make: 控件的布局对象
        //edges/centerX : 自动布局的属性
        //snp_edges/snp_centerX :相对参照属性的偏移量
        iconView.snp_makeConstraints { (make) -> Void in
            //make表示需要添加约束的对象
            make.edges.equalTo(contentView.snp_edges)
        }
        
        //设置开始按钮的约束
        startBtn.snp_makeConstraints { (make) -> Void in
            make.centerX.equalTo(contentView.snp_centerX)
            make.bottom.equalTo(contentView.snp_bottom).offset(-180)
        }
        
        //添加开始体验按钮的点击事件
        startBtn.addTarget(self, action: "startBtnDidClick", forControlEvents: .TouchUpInside)
        //TouchDown 是鼠标落下的瞬间立刻产生事件，TouchUpInside是鼠标落下抬起的连贯动作产生的事件
    }
    
    //开始体验按钮的动画效果
    private func showAnimation () {
        //在动画开始之前 修改 transform 属性
        startBtn.transform = CGAffineTransformMakeScale(0, 0)
        //在动画闭包中,修改按钮的形变
        /**
        这个动画具有衰变的动画效果   是在 iOS7的时候推出的
        
        - parameter <Tduration:             动画的持续时间
        - parameter delay:                  动画延迟时间
        - parameter usingSpringWithDamping: 弹簧系数 区间时[0.1-1]  越小弹性越大
        - parameter initialSpringVelocity:  加速度
        - parameter options:                动画的可选项 Swift 使用数组
        - parameter animations:             执行动画闭包
        - parameter completion:             动画执行完成的闭包
        */
        startBtn.hidden = false
        UIView.animateWithDuration(0.5, delay: 0, usingSpringWithDamping: 0.5, initialSpringVelocity: 5, options: [], animations: { () -> Void in
            self.startBtn.transform = CGAffineTransformIdentity
            }) { (_) -> Void in
                print("OK")
        }
    }
    
    //开始体验按钮的点击方法
    @objc private func startBtnDidClick() {
        //动画结束的时候,发出页面切换的通知
        NSNotificationCenter.defaultCenter().postNotificationName(WBSwitchRootVCNotification, object: nil)
    }
    
    
    
    //分析视图中所有子视图 将所有子视图懒加载出来
    private lazy var iconView: UIImageView = UIImageView(image: UIImage(named: "new_feature_1"))
    
    //懒加载开始按钮
    private lazy var startBtn: UIButton = {
        let btn = UIButton()
        btn.setBackgroundImage(UIImage(named: "new_feature_finish_button"), forState: .Normal)
        btn.setBackgroundImage(UIImage(named: "new_feature_finish_button_highlighted"), forState: .Highlighted)
        btn.setTitle("开始体验", forState: .Normal)
        btn.setTitleColor(UIColor.whiteColor(), forState: .Normal)
        //设置大小
        btn.sizeToFit()
        return btn
    }()

}
